﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Website.Logger;
using UtilityExtensions;
using WebLib;
using System.Web.Script.Services;
using System.Web.Services;
using BOL;
using BOL.UI;
using BOL.Cliente;
using BOL.Ventas;
using DAL;


namespace UILGestion.VentaAdmin.OrdenVenta
{
    public partial class OrdenVentaEditForm : System.Web.UI.Page
    {

        [WebMethod(), ScriptMethod()]
        public static string GetCliente(String prefixText, String contextKey)
        {



            ClienteSearchInfo nuevo = new ClienteSearchInfo();
            nuevo.descripcion = "<strong><span  style='color: #FFFF00;background-color: #800000;'>Registrar nuevo Cliente</span></strong>";
            nuevo.idInternal = 0;
            nuevo.ruta=  rutaNuevoCliete;
            nuevo.tituloTab=tituloTabCliente;
            nuevo.IDTab = ÌDTabCliente;

            var p = (from a in DbUtil.Db.Clientes
                     where (a.descripcion).Contains(prefixText)
                     select new ClienteSearchInfo
                     {
                         idInternal = a.idInternal,
                         descripcion = a.descripcion,
                         numDocumento = String.Format("{0}{1}", a.TipoDocumento.abreviacion, a.numDocumento),
                         correo = a.email,
                         direccion = a.razonSocial,
                         telefono = a.telefono
                    }).Take(10);

            var q = p.ToList();
            q.Add(nuevo);
            return Util.Tbl2Str(Util.EntidadToDataTable(q));

        }


        [WebMethod(), ScriptMethod()]
        public static string GETUI(String prefixText, String contextKey)
        {
            //contextKey=idproyecto
            //obtenemos palabra por palabra
           


            var p = (from a in DbUtil.Db.UIs
                     where (a.codigo + a.descripcion).Contains(prefixText) &
                     a.idEstado == 1
                     & a.Etapa.idProyecto == contextKey.ToInt()
                     & a.Etapa.bitActivo==true
                      & (a.codigo + " " + a.descripcion).Contains(prefixText)
                     
                     select new UISearchInfo
                     {                                                     
                         vista = string.Format("{0} /{1} /{2} /{3}  <b style='color:Blue'>{4}</b>  {5} {6:N}", 
                                            a.Etapa.descripcion, 
                                            a.UILocalizacion.descripcion, 
                                            a.UIBloque.descripcion, 
                                            a.codigo, 
                                            a.descripcion, a.Moneda.simbol, a.precio),
                         idInternal = a.idInternal,
                         etapa=a.Etapa.descripcion,
                         localizacion = a.UILocalizacion.descripcion,
                         piso = a.UIBloque.descripcion,
                         codigo = a.codigo,
                         descripcion = a.descripcion,
                         moneda = a.Moneda.simbol,
                         precio = string.Format("{0:N}",a.precio),
                         separacion = string.Format("{0:N}", a.montoSeparacion),
                     }).Take(30);



            return Util.Tbl2Str(Util.EntidadToDataTable(p));

        }

        public OrdenVentaEditForm()
        {
            bol = new OrdenVentaBL();

            var menu=DbUtil.Db.Menus.Single(p => p.idInternal == 72);
            rutaNuevoCliete = menu.url;
            tituloTabCliente = menu.Aplicacion.title;
            ÌDTabCliente = "tab" + menu.idAplicacion;

        }

        private OrdenVentaBL bol;
        private static string rutaNuevoCliete;
        private static string tituloTabCliente;
        private static string ÌDTabCliente;
        
        
        private string ORDENVENTAITEMINFO="OrdenVentaItemInfo";

        protected void Page_Load(object sender, EventArgs e)
        {


            


            if (!Page.IsPostBack)
            {
                try
                {
                     type.Value = (string)Request.QueryString["type"];
                     internalID.Value = (string)Request.QueryString["id"];
                     idProyecto.Value = (string)Request.QueryString["idProyecto"];
                     paginaAnt.Value = Page.Request.UrlReferrer.AbsoluteUri;
                     menuCtrl1.loadMenuVenta(idProyecto.Value.ToInt());
                     type.Value = (type.Value == String.Empty) ? "A" : type.Value;
                     FormatForm();

                }
                catch (SqlException sqlex)
                {
                    WebServerSideSqlError.Log(sqlex);

                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


                }
                catch (Exception ex)
                {
                    WebServerSideError.Log(ex);
                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

                }

            }
        }


        private void Insert()
        {
            DataSet ds= (DataSet)Session[idColeccion.Value];
            internalID.Value = bol.AddOrdenVenta(fechaTXT.Text.ToDate().Value,
                                              idClienteTXT.Text.ToInt(),
                                              idCoClienteTXT.Text.ToInt(),
                                              copropietarioCHK.Checked,
                                              formatoVentaDDL.SelectedValue.ToInt(),
                                              (idProforma.Value==string.Empty)?null:idProforma.Value.ToInt2(),
                                              comentarioTXT.Text,
                                              bancoDDL.SelectedValue.ToInt2(),
                                              idProyecto.Value.ToInt(),
                                              monedaDDL.SelectedValue.ToInt(),
                                              cuentaAhorroCHK.Checked,
                                                 ds
                                              ).ToString();

              }

        private void Update()
        {
            DataSet ds = (DataSet)Session[idColeccion.Value];
            bol.UpdateOrdenVenta(internalID.Value.ToInt(),
                                    idClienteTXT.Text.ToInt(),
                                    copropietarioCHK.Checked,
                                    idCoClienteTXT.Text.ToInt(),
                                    fechaTXT.Text.ToDate().Value,
                                  formatoVentaDDL.SelectedValue.ToInt(),
                                    comentarioTXT.Text,
                                    bancoDDL.SelectedValue.ToInt(),
                                     cuentaAhorroCHK.Checked,
                                     ds
                                    );

            
        }

        protected void button(object sender, EventArgs e)
        {
            
            try
            {

                if ((sender as Button).ID ==saveBTN.ID)
                {

                    if (type.Value == "E")   { Update(); }
                    if (type.Value == "A")    {Insert(); }

                    Response.Redirect("~/VentaAdmin/OrdenVenta/OrdenVentaReadForm.aspx?id={0}&idProyecto={1}".Fmt(internalID.Value,idProyecto.Value), true);
                   

                }
                if ((sender as Button).ID == cancelarBTN.ID)
                {
                    Response.Redirect(paginaAnt.Value, true);
                }
                if ((sender as Button).ID ==refreshBTN.ID)
                {
                    FormatForm();
                }


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }




        }
        private void ShowAllComboBox()
        {
            
            
            bancoDDL.DataValueField = "idInternal";
            bancoDDL.DataTextField = "descripcion";
            bancoDDL.DataSource = new ListValueBL().GetBancoActivoXProyecto(idProyecto.Value.ToInt());
            bancoDDL.DataBind();

            monedaDDL.DataValueField = "idInternal";
            monedaDDL.DataTextField = "descripcion";
            monedaDDL.DataSource = new BOL.ListValueBL().GetMoneda();
            monedaDDL.DataBind();

            formatoVentaDDL.DataValueField = "idInternal";
            formatoVentaDDL.DataTextField = "descripcion";
            formatoVentaDDL.DataSource = DbUtil.Db.FormatoVentas;
            formatoVentaDDL.DataBind();


            

        }

        public void SetEstadistica()
        {
            
                DataSet ds=(DataSet)Session[idColeccion.Value];

              //lo que se esta seleccionando es de la misma moneda
            var item=from a in ds.Tables[ORDENVENTAITEMINFO].AsEnumerable().Where(p=>p.RowState!=DataRowState.Deleted)
                      select a;

            monedaDDL.SelectedValue= item.Count() > 0 ? item.First().Field<Moneda>("moneda").idInternal.ToString() : "3";

               totalLabel.Text = item.Count()>0?item.Sum(a=>a.Field<decimal>("total")).ToString("N"):"0.00";
            totalUPNL.Update();
        }


        private void LoadItem(int idParent)
        {

            DataTable ordenVentaItemList = Util.EntidadToDataTable(bol.GetOrdenVentaItem(idParent));

            DataSet ds = new DataSet();

            ordenVentaItemList.TableName = ORDENVENTAITEMINFO;

            ds.Tables.Add(ordenVentaItemList);
            ds.AcceptChanges();
            
            Session[idColeccion.Value] = ds;
        }

        private void Load()
        {
            DAL.OrdenVenta ordenVenta = DbUtil.Db.OrdenVentas.Single(p => p.idInternal == internalID.Value.ToInt());

            fechaTXT.Text = ordenVenta.fecha.ToShortDateString();
            cliente1TXT.Text = ordenVenta.Cliente.descripcion;
            clienteTXT.Text = ordenVenta.Cliente.descripcion;
            idClienteTXT.Text = ordenVenta.idCliente.ToString();
            idCoClienteTXT.Text = ordenVenta.idCoCliente.ToString();

            formatoVentaDDL.SelectedValue = ordenVenta.idFormatoVenta.ToString();
            vendedorLBL.Text = ordenVenta.Empleado.descripcion;
            comentarioTXT.Text = ordenVenta.comentario;
            bancoDDL.SelectedValue = ordenVenta.idBanco.ToString();
            bancoPNL.Visible = (ordenVenta.idBanco != null) ? true : false;
            totalLabel.Text = (ordenVenta.OrdenVentaItems.Count>0)? ordenVenta.OrdenVentaItems.Sum(p => p.total).ToString():"0";
            cuentaAhorroCHK.Checked = ordenVenta.cuentaAhorro==1?true:false;
            
            coclienteTXT.Text = (ordenVenta.idCoCliente == null) ? "" : ordenVenta.Cliente1.descripcion;
            copropietarioCHK.Checked = ordenVenta.bitCopropietario;
            copropietarioPNL.Visible = false;
           if  (ordenVenta.bitCopropietario)
             {
                 copropietarioPNL.Visible = true;
             }



            bancoPNL.Visible = false;
            if (ordenVenta.FormatoVenta.bitBanco)
            {
                bancoPNL.Visible = true;

            }
            // controla el estado de los requerimientos, no debe ser variado en editar
            copropietarioCHK.Enabled = false;
            //set el DATASET
            LoadItem(int.Parse(internalID.Value));
                        OrdenVentaItem1.Load(idColeccion.Value.ToInt(),internalID.Value.ToInt());

        }

        private void FormatForm()
        {

            //--------------------
            //int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
            //bool acceso = new DAL.FormularioAcceso().VerificarAcceso(DbUtil.Db,
            //    idEmpleadoEmisor,
            //    11, //Proveeedor
            //    2); //lectura
            ////------------------------- 
            //// los paneles presentes en el formulario
            //pnlMain.Visible = true;
            ShowAllComboBox();
                
            idColeccion.Value = Parametros.GenerarID().ToString();

            if (type.Value == "E")
            {
                Load();
                
            }
            if (type.Value == "A")
            {
                fechaTXT.Text = DateTime.Now.ToShortDateString();
                numDocumento.Text = new DAL.OrdenVenta().getCorrelativo(DbUtil.Db, idProyecto.Value.ToInt()).ToString();
                totalLabel.Text = "0.00";
                

                bancoPNL.Visible = false;
                copropietarioPNL.Visible = false;
                //set el DATASET
                LoadItem(0);
                var idUI= (string)Request.QueryString["idUI"];
                if (idUI.ToInt()!=0)
                    OrdenVentaItem1.LoadFromGrafico(idColeccion.Value.ToInt(), internalID.Value.ToInt(), idUI.ToInt());
                else
                    OrdenVentaItem1.Load(idColeccion.Value.ToInt(),internalID.Value.ToInt());
                
                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                vendedorLBL.Text = DbUtil.Db.Empleados.Single(p => p.idInternal == idEmpleadoEmisor).descripcion;
                
                

            }

        }

        protected void formatoVentaDDL_SelectedIndexChanged(object sender, EventArgs e)
        {
            int idFormato=formatoVentaDDL.SelectedValue.ToInt();
            if (idFormato> 0)
            {
                var formato = DbUtil.Db.FormatoVentas.Single(p => p.idinternal == idFormato);
                bancoPNL.Visible = false;
                if (formato.bitBanco)
                {
                    bancoPNL.Visible=true;
                    bancoUPNL.Update();
                }
            }
        }

        protected void copropietarioCHK_CheckedChanged(object sender, EventArgs e)
        {
                copropietarioPNL.Visible = copropietarioCHK.Checked;
                if (!copropietarioCHK.Checked)
                {
                    coClienteTXT1.Text = string.Empty;
                    coclienteTXT.Text = string.Empty;
                    idCoClienteTXT.Text = string.Empty;
                }
            
                copropietarioUPNL.Update();

            
        }

       

      

        
       
    }
}